import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

import { SAVE } from './mutations_type'
import {getuserInfo} from '@/api/user'
import { getQiniuToken, uploadQiniu} from '@/api/api'

export default new Vuex.Store({
  state: {
    //往里面放东西的 例如 vue中的data
    uid:'',
    token:'',
    userInfo:'',
    isLogin:false,
    liked_num:'',
    publish_num:''
  },
  getters: {

    // 相当于vue中的computed
  },
  mutations: { //这里面是改数据的    是同步的  用commit来调
    [SAVE](state,[key,val]){
      state[key]=val
  // console.log(state[key]);
  // console.log(state.uid);
    },
    clear(state){
      state['uid']=''
      state['token']=''
      state['userInfo']=''
      state['isLogin']=false
      state['publish_num']=0
      state['liked_num']=0
    },
  
    
  },
  actions: {//这里面用dispatch来调  这里面是异步的
    // 放到全局里面
    //调接口
    // {commit}相当于obj.{commit}
    getuserInfo({commit},token){
    return  getuserInfo({
          token
      }).then(res=>{
        console.log(res);
      let {uid ,userInfo,publish_num,liked_num}=res

      // token没过期免登录
      commit('save',['uid',uid])
      commit('save',['userInfo',userInfo])
      commit('save',['token',token])
      commit('save',['isLogin',true])
      commit('save',['liked_num',liked_num])
      commit('save',['publish_num',publish_num])
      })
    },

    // 上传图片
    async upload(o ,fileList) {
      // 接收fileList
      if (!Array.isArray(fileList) || fileList.length === 0) {
        return [];
      }

      // 如果是多张图片的话 我们需要多个上传任务
      // Promise.all 接收一个数组 数组里面是多个promise对象
      // 检测所有的Promise都陈工以后 把他们所有的resolve的值组成新数组 并且返回出去
      let task = fileList.map((v) => {
        return new Promise((resolve, reject) => {
          // 生成一个随即名字
          let file = v.file;
          let { type } = file; //拿到上传文件的type

          //二进制文件

          type = type.split("/")[1];

          //重新命名
          let file_name = `${new Date().getTime()}_${Math.random()
            .toString(36)
            .slice(2)}.${type}`;

          getQiniuToken().then(({ token }) => {
            const formdata = new FormData();
            formdata.append("file", file);
            formdata.append("token", token);
            formdata.append("key", file_name);

            // 上传到七牛云的服务器

            uploadQiniu(formdata).then((res) => {
              resolve(`http://toutiao.longxiaokj.com/` + res.key);
            });
          });
        });
      });
      console.log(task);
      let imgList = await Promise.all(task);
      return imgList;
    },
  },
  modules: {
  }
})
